import Request from 'luch-request'
import { BASE_URL, WHITE_LIST } from './constants'
import { useUserStore } from '@/store/user'

// 1. 创建Request实例对象
const request = new Request({
  // 接口基地址
  baseURL:BASE_URL,
  custom:{
    loading:true
  }
})

// 3. 请求拦截器
request.interceptors.request.use(
  (config)=>{
    if(config.custom){
      uni.showLoading({title:'正在加载中...',mask:true})
    }
    // 3.1 判断是否有token, 而且请求的接口地址不在白名单中
    const store = useUserStore()
    if(store.token && !WHITE_LIST.includes(config.url as string)){
      config.header!.Authorization = `Bearer ${store.token}`
    }

    return config
  },
  (error)=>{
    return Promise.reject(error)
  }
)

// 4. 响应拦截器
request.interceptors.response.use(
  (res)=>{
    // 关闭弹层
    uni.hideLoading()
    // 统一错误处理
    if(res.data.code !== 10000){
      uni.showToast({
        title:res.data.message,
        icon:'none'
      })
      return Promise.reject(res.data)
    }
    return res.data?.data
  },
  (error) =>{
    // 关闭弹层
    uni.hideLoading()
    uni.showToast({
      title:error.data.message,
      icon:'none'
    })
    // 判断token过期情况
    if (error.statusCode === 401) { 
      uni.reLaunch({
        url:'/pages/login/index'
      })
    }
    return Promise.reject(error)
  }
)


// 2. 导出
export { request }